/**
 * 项目名称:静态内部类
 * 1、用static修饰的内部类，称为静态内部类
 * 2、static关键字的作用时把修饰的成员变成类相关换的
 *    static修饰成员变量，该变量称为类变量，静态变量
 *
 * @Author: 夏国倩
 * @Date: 2023/9/25 10:03
 * @Copyright
 */
package inner;
public class StaticDemo1 {
    int a=10; //成员变量、实例变量
    static int b=20; //类变量

    //静态方法
    public static void print(){

    }
    //成员方法
    public void syso(){

    }

    static class  StaticClass{ //静态内部类
        static int c=30;
        int d=40;
        public static void m1(){
            //静态内部类不能直接访问外部类实例变量
            //System.out.println(a);
            //静态内部类只可以访问外部类类成员
            System.out.println(b);
        }
        //实例方法
        public void m2(){
            //静态内部类的实例方法，调用静态内部类的静态方法
            StaticClass.m1();
        }
    }

    public static void main(String[] args) {
        /*
        访问静态内部类的实例成员，需创建实例对象，才可以调用，因为实例成员是属于实例的
        格式： 外部类名.内部类名 变量名=new 外部类名.内部类名();
        调用静态内部类的静态属性和方法
        通过“外部类.内部类.属性（方法）”
         */
        StaticClass st=new StaticClass();
        //访问静态内部类的实例方法
        st.m2();
        
        //访问静态内部类的实例成员
        int d = st.d;
        System.out.println("访问静态内部类的实例成员：d="+d);
        
        //访问静态内部类的类成员
        int c = StaticClass.c;
        System.out.println("访问静态内部类的类成员：c="+c);

        //访问静态内部类的类方法
        System.out.print("访问静态内部类的类方法：");
        StaticClass.m1();
    }
}
